﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using BusinessLogicLayer.Global;
using BusinessLogicLayer.Logistica;
using BusinessEntityLayer.Resultado;

namespace Reportes.Logistica
{
    public partial class LogisticaIngresosModificar : Form
    {
        public LogisticaIngresosModificar()
        {
            InitializeComponent();
        }

        private static LogisticaIngresosModificar m_FormDefInstance;
        public static LogisticaIngresosModificar DefInstance
        {
            get
            {
                if (m_FormDefInstance == null || m_FormDefInstance.IsDisposed)
                    m_FormDefInstance = new LogisticaIngresosModificar();
                return m_FormDefInstance;
            }
            set
            {
                m_FormDefInstance = value;
            }
        }


        #region "Procedimientos"

        private void CargarEmpresa()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvGlobal.Fnc_Listar_Empresas();

                if (VL_BeanResultado.blnExiste == true)
                {
                    cboEmpresa.DataSource = VL_BeanResultado.dtResultado;
                    cboEmpresa.DisplayMember = "EmprDescripcion";
                    cboEmpresa.ValueMember = "EmprCodigo";
                    cboEmpresa.SelectedValue = "01";

                    //CargarAlmacen();
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje);
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void CargarAlmacen()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvGlobal.Fnc_Listar_AlmacenEmpresa(cboEmpresa.SelectedValue.ToString());

                if (VL_BeanResultado.blnExiste == true)
                {
                    cboAlmacen.DataSource = VL_BeanResultado.dtResultado;
                    cboAlmacen.DisplayMember = "AlmDescripcion";
                    cboAlmacen.ValueMember = "AlmCodigo";
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CargarListaIngresosCabecera()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvModificarIngresos VL_SrvModificarIngresos = new SrvModificarIngresos();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvModificarIngresos.Fnc_Listar_Ingresos_Cabecera(VL_EMPRCODIGO,VL_ALMCODIGO,VL_RAZONSOCIAL,VL_NRODOCREFERENCIA,VL_FECHA_INICIO,VL_FECHA_FIN);

                if (VL_BeanResultado.blnExiste == true)
                {
                    dgvLista.DataSource = VL_BeanResultado.dtResultado;
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CargarListaIngresosDetalle()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvModificarIngresos VL_SrvModificarIngresos = new SrvModificarIngresos();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvModificarIngresos.Fnc_Listar_Ingresos_Detalle(VL_EMPRCODIGO,VL_AINGCODIGO);

                if (VL_BeanResultado.blnExiste == true)
                {
                    dgvSubLista.DataSource = VL_BeanResultado.dtResultado;


                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CalculoTotal()
        {
            decimal sum = 0;
            for (int i = 0; i < dgvSubLista.Rows.Count; ++i)
            {
                sum += decimal.Parse(dgvSubLista.Rows[i].Cells["DIngImporteGrupal"].Value.ToString());
            }

            String VL_SIGNO = "US$ ";

            if (VL_MONCODIGO == "01")
            {
                VL_SIGNO = "S/. ";
            }

            txtTotal.Text = VL_SIGNO + sum.ToString();
        }

        private void Actualizar_Ingreso_Temporal_Precio(String VI_AINGCODIGO, String VI_EMPRCODIGO, String VI_DESTINO)
        {
            SrvVerificar VL_SrvVerificar = new SrvVerificar();
            BeanResultado.ResultadoTransaccion VL_BeanResultado = new BeanResultado.ResultadoTransaccion();

            VL_BeanResultado = VL_SrvVerificar.Fnc_Insertar_Ingresos_Temporales_Precio(VI_AINGCODIGO, VI_EMPRCODIGO, VI_DESTINO);

            if (VL_BeanResultado.blnResultado == false)
            {
                MessageBox.Show(VL_BeanResultado.strMensaje, "Error");
                return;
            }
            else
            {
                return;
            }

        }

        private void Eliminar_Ingreso_Temporal_Precio()
        {
            SrvVerificar VL_SrvVerificar = new SrvVerificar();
            BeanResultado.ResultadoTransaccion VL_BeanResultado = new BeanResultado.ResultadoTransaccion();

            VL_BeanResultado = VL_SrvVerificar.Fnc_Eliminar_Ingresos_Temporales_Precio();

            if (VL_BeanResultado.blnResultado == false)
            {
                MessageBox.Show(VL_BeanResultado.strMensaje, "Error");
                return;
            }
            else
            {
                return;
            }
        }

        private void CargarTipoCambio()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvVerificar VL_SrvVerificar = new SrvVerificar();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvVerificar.Fnc_Listar_TipoCambio(VL_TESORERIA_FECHAFACTURA);

                if (VL_BeanResultado.blnExiste == true)
                {
                    txtTCambio.Text = VL_BeanResultado.dtResultado.Rows[0][0].ToString();
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CargarSubLista()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvVerificar VL_SrvVerificar = new SrvVerificar();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvVerificar.Fnc_Listar_IngresosFacturaDetalle_Precio();

                if (VL_BeanResultado.blnExiste == true)
                {
                    dgvSubLista.DataSource = VL_BeanResultado.dtResultado;


                    CalculoTotal();

                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        #endregion

        #region "Declaraciones"

        String VL_EMPRCODIGO = "";
        String VL_ALMCODIGO = "";
        String VL_FECHA_INICIO = "";
        String VL_FECHA_FIN = "";
        String VL_RAZONSOCIAL = "";
        String VL_NRODOCREFERENCIA = "";


        String VL_AINGCODIGO;
        String VL_DESTINO;
        String VL_MONCODIGO;


        //TESORERIA

        String VL_IDREGISTRO;
        String VL_TESORERIA_EMPRESA;
        Double VL_TESORERIA_VALORVENTA;
        DateTime VL_TESORERIA_FECHAFACTURA;

        #endregion

        private void LogisticaIngresosModificar_Load(object sender, EventArgs e)
        {
            CargarEmpresa();
            CargarAlmacen();
        }

        private void cboAlmacen_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
        {
 
            
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            VL_EMPRCODIGO = cboEmpresa.SelectedValue.ToString();
            VL_ALMCODIGO = cboAlmacen.SelectedValue.ToString();
            VL_RAZONSOCIAL = txtRazonSocial.Text;
            VL_NRODOCREFERENCIA = txtNroDocReferencia.Text;
            VL_FECHA_INICIO = dtpInicio.Text;
            VL_FECHA_FIN = dtpFin.Text;

            CargarListaIngresosCabecera();

        }

        private void cboAlmacen_SelectedValueChanged(object sender, EventArgs e)
        {
            
        }

        private void cboEmpresa_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
        {
            if (cboEmpresa.Items.Count > 0)
            {
                CargarAlmacen();
            }
        }

        private void dgvLista_Click(object sender, EventArgs e)
        {
            if (dgvLista.Rows.Count() > 0)
            {
                VL_AINGCODIGO = dgvLista.CurrentRow.Cells["aIngCodigo"].Value.ToString() + "";
                VL_EMPRCODIGO = dgvLista.CurrentRow.Cells["EmprCodigo"].Value.ToString() + "";
                VL_DESTINO = dgvLista.CurrentRow.Cells["Destino"].Value.ToString() + "";
                VL_MONCODIGO = dgvLista.CurrentRow.Cells["MONCODIGO"].Value.ToString() + "";

                //CargarListaIngresosDetalle();
                //CalculoTotal();
            }
        }

        private void dgvSubLista_CellEndEdit(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
        {
            if (e.Value != null)
            {



                if (chkIncluyeIGV.Checked == true)
                {
                    dgvSubLista.CurrentRow.Cells["DIngImporteGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value) / 1.18), 5));
                    dgvSubLista.CurrentRow.Cells["DIngPrecioGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value) / 1.18) / Convert.ToDouble(dgvSubLista.CurrentRow.Cells["CantidadGrupoContada"].Value), 5));
                    CalculoTotal();
                }
                else
                {
                    dgvSubLista.CurrentRow.Cells["DIngImporteGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value)), 5));
                    dgvSubLista.CurrentRow.Cells["DIngPrecioGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value)) / Convert.ToDouble(dgvSubLista.CurrentRow.Cells["CantidadGrupoContada"].Value), 5));
                    CalculoTotal();
                }
            }
        }

        private void dgvSubLista_ContextMenuOpening(object sender, Telerik.WinControls.UI.ContextMenuOpeningEventArgs e)
        {
              
        }

        private void btnVerFacturas_Click(object sender, EventArgs e)
        {
            VL_IDREGISTRO = "";
            VL_TESORERIA_EMPRESA = "";

            Eliminar_Ingreso_Temporal_Precio();

            for (int i = 0; i < dgvLista.Rows.Count; i++)
            {
                if (Convert.ToBoolean(dgvLista.Rows[i].Cells["Check"].Value) == true)
                {
                    VL_AINGCODIGO = dgvLista.Rows[i].Cells["aIngCodigo"].Value.ToString() + "";
                    VL_EMPRCODIGO = dgvLista.Rows[i].Cells["EmprCodigo"].Value.ToString() + "";
                    VL_DESTINO = dgvLista.Rows[i].Cells["Destino"].Value.ToString() + "";

                    Actualizar_Ingreso_Temporal_Precio(VL_AINGCODIGO, VL_EMPRCODIGO, VL_DESTINO);
                }
            }

            using (var form = new LogisticaIngresosModificarVerFactura())
            {
                var result = form.ShowDialog();
                if (result == DialogResult.OK)
                {

                    VL_IDREGISTRO = form.VL_IDREGISTRO;
                    VL_TESORERIA_EMPRESA = form.VL_TESORERIA_EMPRESA;
                    VL_TESORERIA_VALORVENTA = form.VL_TESORERIA_VALORVENTA;
                    VL_TESORERIA_FECHAFACTURA = Convert.ToDateTime(form.VL_TESORERIA_FECHAFACTURA);



                    CargarTipoCambio();
                    txtNroDocumento.Text = form.VL_NRODOCUMENTO;
                    txtValorVenta.Text = VL_TESORERIA_VALORVENTA.ToString();
                }
            }

            if (VL_IDREGISTRO == "")
            {
                return;
            }

            CargarSubLista();
        }

        private void dgvSubLista_CellEndEdit_1(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
        {
            if (e.Value != null)
            {



                if (chkIncluyeIGV.Checked == true)
                {
                    dgvSubLista.CurrentRow.Cells["DIngImporteGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value) / 1.18), 5));
                    dgvSubLista.CurrentRow.Cells["DIngPrecioGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value) / 1.18) / Convert.ToDouble(dgvSubLista.CurrentRow.Cells["CantidadGrupoContada"].Value), 5));

                    CalculoTotal();

                }
                else
                {
                    dgvSubLista.CurrentRow.Cells["DIngImporteGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value)), 5));
                    dgvSubLista.CurrentRow.Cells["DIngPrecioGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value)) / Convert.ToDouble(dgvSubLista.CurrentRow.Cells["CantidadGrupoContada"].Value), 5));

                    CalculoTotal();
                }

            }
        }
    }
}
